package main

import (
	"fmt"
)
func fn1(x int){
	x = 10
}
func fn2(x *int){
	*x = 40
}

func main() {
	// var a int = 10
	// fmt.Printf("a的值:%v a的类型%T a的地址%p",a,a,&a)
	// 指针

	// var a =10
	// var p =&a  //p指针变量 p的类型是*int 存储的另一个变量的内存地址
	// fmt.Printf("a的值:%v a的类型%T a的地址%p\n",a,a,&a)
	// fmt.Printf("p的值:%v p的类型%T p的地址%p",p,p,&p)
	// golang里面变量都有内存地址
	
	// var a =10
	// var b =&a  //p指针变量 p的类型是*int 存储的另一个变量的内存地址
	// fmt.Printf("a的值:%v a的类型%T a的地址%p\n",a,a,&a)
	// fmt.Printf("p的值:%v p的类型%T p的地址%p",b,b,&b)
	// a := 10
	// p :=&a //p是指针变量 类型*int

	// //*p //表示取出p这个变量对应的内存地址的值
	// fmt.Println(p)  //a的地址
	// fmt.Println(*p) //*p表示打印a对应的值

	// *p =30 //改变p这个变量对应内存地址的值
	// fmt.Println(a)
	// var a =5
	// fn1(a)
	// fmt.Println(a) //a=5
	// fn2(&a)
	// fmt.Println(a) //40

	// 使用make函数开辟存储空间
	var userinfo = make(map[string]string)
	userinfo["username"]="张三"
	fmt.Println(userinfo)

	// var a []int
	// a[0] =1
	// fmt.Println(a)
	// 使用make开辟存储空间
	// var a =make([]int,4,4)
	// a[0]=1
	// fmt.Println(a)

	// 使用new 函数分配内存
	// 使用new 得到一个指针类型的变量
	// 错误的写法
	// var a *int
	// *a =100  /引用数据类型 引用必须分配存储空间
	// fmt.Println(*a)
	// var a =new(int) //a是一个指针变量 类型 *int的指针类型 值是0
	// fmt.Printf("值:%v 类型:%T 指针变量对应的值:%v",a,a,&a)
	var a1 *int
	a1 =new(int)
	*a1=100
	fmt.Println(*a1)
	  
	// make函数分配内存 切片 map channel
	var f =new(bool)
	fmt.Println(*f)

	

}